var _ = require('lodash')
var path = require('path')
var dao = require(path.join(process.cwd(), 'dao/PermissionAPIDAO'))

// 获取所有权限
module.exports.getAllRights = function (type, cb) {
  if (!type || (type != 'list' && type != 'tree')) {
    cb('参数类型错误')
  }

  dao.list(function (err, permissions) {
    if (err) return cb('获取权限数据失败')

    if (type == 'list') {
      var result = []
      for (idx in permissions) {
        permission = permissions[idx]
        result.push({
          id: permission.ps_id,
          authName: permission.ps_name,
          level: permission.ps_level,
          pid: permission.ps_pid,
          path: permission.ps_api_path
        })
      }
      cb(null, result)
    } else {
      var keyCategories = _.keyBy(permissions, 'ps_id')

      // 显示一级
      var permissionsResult = {}

      // 处理一级菜单
      for (idx in permissions) {
        permission = permissions[idx]
        if (permission && permission.ps_level == 0) {
          permissionsResult[permission.ps_id] = {
            id: permission.ps_id,
            authName: permission.ps_name,
            path: permission.ps_api_path,
            pid: permission.ps_pid,
            children: []
          }
        }
      }

      // 临时存储二级返回结果
      tmpResult = {}
      // 处理二级菜单
      for (idx in permissions) {
        permission = permissions[idx]
        if (permission && permission.ps_level == 1) {
          parentPermissionResult = permissionsResult[permission.ps_pid]
          if (parentPermissionResult) {
            tmpResult[permission.ps_id] = {
              id: permission.ps_id,
              authName: permission.ps_name,
              path: permission.ps_api_path,
              pid: permission.ps_pid,
              children: []
            }
            parentPermissionResult.children.push(tmpResult[permission.ps_id])
          }
        }
      }

      // 处理三级菜单
      for (idx in permissions) {
        permission = permissions[idx]
        if (permission && permission.ps_level == 2) {
          parentPermissionResult = tmpResult[permission.ps_pid]

          if (parentPermissionResult) {
            parentPermissionResult.children.push({
              id: permission.ps_id,
              authName: permission.ps_name,
              path: permission.ps_api_path,
              pid: permission.ps_pid + ',' + keyCategories[permission.ps_pid].ps_pid
            })
          }
        }
      }

      cb(null, _.values(permissionsResult))
    }
  })
}
